package com.funmi.lizip.utils.keyUtils;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileSystemView;

public class imgRename {

    /**
     * 将图片名称修改成图片属性的[修改时间]
     *
     * @author InJavaWeTrust
     */
    public static class ReName {

        public static String TimeMod = "ModeTime";//ModeTime或CreateTime

        public static void rename(String PATH, String suffix) {
            File file = new File(PATH);
            File[] files = file.listFiles();
            String newName = "";
            System.out.println("------------重命名------------");
            int i = 0;
            String stri = null;
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyymmddhhmmss");
            for (File f : files) {
                stri = new DecimalFormat("0000").format(i);
                if (TimeMod.equals("ModeTime")) {
                    newName = simpleDateFormat.format(new Date(files[i].lastModified()));
                    newName = newName + stri + "." + suffix;
                } else if (TimeMod.equals("CreateTime")) {
                    newName = getCreateTime(PATH, suffix) + stri + "." + suffix;
                } else {
                    return;
                }
                newName = newName.replace(" ", "");
                newName = newName.replace("/", "_");
                newName = newName.replace(":", "_");
                System.out.println(f.getName() + " --> " + newName);
                //System.out.println(PATH + File.separator + newName);
                f.renameTo(new File(PATH + File.separator + newName));
                i++;
            }
        }

        public static String getCreateTime(String filePath, String suffix) {
            String strTime = null;
            try {
                Process p = Runtime.getRuntime().exec("cmd /C dir "
                        + filePath
                        + "/tc");
                InputStream is = p.getInputStream();
                BufferedReader br = new BufferedReader(new InputStreamReader(is));
                String line;
                while ((line = br.readLine()) != null) {
                    if (line.endsWith("." + suffix)) {
                        strTime = line.substring(0, 17);
                        break;
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            //System.out.println("创建时间 " + strTime);
            //输出：创建时间 2009-08-17 10:21
            return strTime;
        }


        public static void main(String[] args) {

            //获得目标的工作目录
            String path = getPath();
            if (path != null) {
                //LinkedHashMap<String, String> map = getFiles(path);
                try {
                    readfile(path);
                } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

        }

        public static String getPath() {
            String path = "D:\\data\\yf\\866547058607816\\4564646456.jpg";
            JFileChooser fileChooser = new JFileChooser();
            FileSystemView fsv = FileSystemView.getFileSystemView(); //注意了，这里重要的一句
            fileChooser.setCurrentDirectory(fsv.getHomeDirectory());
            fileChooser.setDialogTitle("请选择要命名为创建日期的图片文件夹...");
            fileChooser.setApproveButtonText("确定");
            fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);

            int returnVal = fileChooser.showOpenDialog(fileChooser);

            if (returnVal == JFileChooser.APPROVE_OPTION) {
                path = fileChooser.getSelectedFile().getAbsolutePath();//这个就是你选择的文件夹的路径
                System.out.println(path);
                return path;
            }
            return null;
        }


        /**
         * 重命名
         */
        /**
         * 读取某个文件夹下的所有文件
         */
        public static boolean readfile(String filepath) throws FileNotFoundException, IOException {
            try {

                File file = new File(filepath);
                if (!file.isDirectory()) {
                    String fileName = file.getName();
                    String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
 /*System.out.println("name=" + file.getName());
 System.out.println("path=" + file.getPath());
 System.out.println("absolutepath=" + file.getAbsolutePath());
 System.out.println("suffix=" + suffix);
 */
                    if ((suffix.equals("jpg") || suffix.equals("jpeg") || suffix.equals("gif") || suffix.equals("png") || suffix.equals("bmp")) && !fileName.substring(0, 3).equals("201")) {
                        rename(file.getPath(), suffix);
                    }

                } else if (file.isDirectory()) {
                    //System.out.println("文件夹");
                    String[] filelist = file.list();
                    for (int i = 0; i < filelist.length; i++) {
                        File readfile = new File(filepath + "\\" + filelist[i]);
                        if (!readfile.isDirectory()) {
                            String fileName = readfile.getName();
                            String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
                            System.out.println("name=" + file.getName());
                            //System.out.println("path=" + readfile.getPath());
                            //System.out.println("absolutepath=" + readfile.getAbsolutePath());
                            System.out.println("suffix=" + suffix);

                            if ((suffix.equals("jpg") || suffix.equals("jpeg") || suffix.equals("gif") || suffix.equals("png") || suffix.equals("bmp")) && !fileName.substring(0, 3).equals("201")) {
                                rename(file.getPath(), suffix);
                                break;
                            }
                        } else if (readfile.isDirectory()) {
                            readfile(filepath + "\\" + filelist[i]);
                        }
                    }

                }

            } catch (FileNotFoundException e) {
                System.out.println("readfile() Exception:" + e.getMessage());
            }
            return true;
        }

    }

}